<?php

class SenhasController extends AppController {
  
  
    public $uses = array("Senha", 'User', 'Info');
    public $helpers = array('Cakebr.Formatacao', 'Form2');
    public $paginate = array(
        "Pagina" => array(
            "limit" => 30,
            "order" => array(
                "Pagina.id" => "ASC"
            )
        )
    );
	
 var $components = array('Email', 'RequestHandler', 'Auth');

	function beforeFilter()
	{
		parent::beforeFilter();
		
		Security::setHash('sha256'); // Setamos o algoritmo que iremos utilizar, o padrão é sha1
		$this->Auth->authError = 'Área Restrita! Efetue login!'; // Mensagem ao entrar em area restrita
		$this->Auth->loginError = 'Nome de usuário ou senha não conferem!'; // Mensagem quando não se autenticar
		$this->Auth->loginRedirect = array('action' => 'area_restrita', 'controller' => 'users');
		
		$this->Auth->fields = array(
			'username' => 'cpf',
			'password' => 'password'
		);
		
		$this->Auth->allow('senhas' , 'index');
		$this->Auth->allow('senhas' , 'redefine');
		$this->Auth->allow('senhas' , 'email');

        Configure::write(
            'Base', array('this' => $this->User, 'tabela' => 'User')
        );

	}
	function email($emailCliente, $nomeCliente, $code)
	{
		$this->loadModel('Modulo');
        $smtp_email = $this->Modulo->read('Modulo.valor', 1);
        $smtp_usuario = $this->Modulo->read('Modulo.valor', 4);
        $smtp_senha = $this->Modulo->read('Modulo.valor', 5);
        $smtp_host = $this->Modulo->read('Modulo.valor', 2);
        $smtp_port = $this->Modulo->read('Modulo.valor', 32);

        $smtp_email = $smtp_email['Modulo']['valor'];
        $smtp_usuario = $smtp_usuario['Modulo']['valor'];
        $smtp_senha = $smtp_senha['Modulo']['valor'];
        $smtp_host = $smtp_host['Modulo']['valor'];
        $smtp_port = $smtp_port['Modulo']['valor'];

		
		   $this->Email->smtpOptions = array(
		   'port'=>$smtp_port,
		   'timeout'=>'30',
		   'host' => $smtp_host,
		   /*'username'=>'Admin@localhost',
		   'password'=>'',*/
		   'client' => 'samuel'
		);
		
		$this->Email->delivery = 'smtp';
		
		$User = $nomeCliente;
		$this->Email->to = $emailCliente;
		
		$this->Email->subject = 'All Brazil - Recuperação de Senha';
		$this->Email->replyTo = $smtp_email;
		$this->Email->from = 'All Brazil <'.$smtp_email.'>';
		$this->Email->layout = 'default_senha';
		$this->Email->template = 'default';
		$this->Email->sendAs = 'html';
		$this->set('User', $User);
		$this->set('code', $code);
		
		$this->set('email', $emailCliente);
		$content="Atenção:";
		$this->set("content", $content);
		$this->Email->send();
		$this->set('smtp-errors', $this->Email->smtpError);
		echo($this->Email->smtpError);

	}
	
    public function index($id = null)
	{
		/**
		* Função para gerar senhas aleatórias
		*
		* @author    Thiago Belem <contato@thiagobelem.net>
		*
		* @param integer $tamanho Tamanho da senha a ser gerada
		* @param boolean $maiusculas Se terá letras maiúsculas
		* @param boolean $numeros Se terá números
		* @param boolean $simbolos Se terá símbolos
		*
		* @return string A senha gerada
		*/
		function geraSenha($tamanho = 8, $maiusculas = true, $numeros = true, $simbolos = false)
		{
			$lmin = 'abcdefghijklmnopqrstuvwxyz';
			$lmai = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
			$num = '1234567890';
			$simb = '!@#$%*-';
			$retorno = '';
			$caracteres = '';
			
			$caracteres .= $lmin;
			if ($maiusculas) $caracteres .= $lmai;
			if ($numeros) $caracteres .= $num;
			if ($simbolos) $caracteres .= $simb;
			
			$len = strlen($caracteres);
			for ($n = 1; $n <= $tamanho; $n++)
			{
				$rand = mt_rand(1, $len);
				$retorno .= $caracteres[$rand-1];
			}
			return $retorno;
		}
		//$this->set('msg', null);
		
		
		
		if($this->data)
		{
			//$senha = geraSenha(10,true,true,false);
			
			
			$usuarios = $this->User->find('first', array('conditions' => array('User.cpf' => $this->data['Info']['cpf'])));
			$this->set('usuarios',$usuarios);
			
			$usuarios_info = $this->Info->find('first', array('conditions' => array('Info.usuario_id' => $usuarios['User']['id'])));
			$this->set('usuarios_info',$usuarios_info);
			
			$senhas = $this->Senha->find('all');
			$this->set('senhas',$senhas);
			
			$buscaCpf = ($this->User->find('count', array('conditions' => array('User.cpf' => $this->data['Info']['cpf']))));
			
			if($buscaCpf != 0)
			{
				
				$buscaSenha = $this->Senha->find('count', array('conditions' => array('Senha.cpf' => $this->data['Info']['cpf'])));
				
				
					$novocodigo = geraSenha(40,true,true,false);
					$novasenha = geraSenha(10,true,true,false);
					
					$this->Senha->create();
					$this->Senha->set(array(
					'cpf' => $usuarios['User']['cpf'],
					'codigo' => $novocodigo,
					'senha' => $novasenha
					));
					$this->Senha->save($usuarios['User']['cpf']);
					$this->email($usuarios_info['Info']['email'], $usuarios_info['Info']['nome'], $novocodigo);
					$this->set('msg', 'Acesse seu email para confirmar a mudança de senha.');
				
			}
			else
			{
				
				$this->set('msg', 'Esse CPF não consta em nosso banco de dados.');
			}
		}
		
		else
		{
			$this->set('msg', null);
		}
    }
	
	function redefine($codigo=null)
	{
		$buscaSenha = $this->Senha->find('count', array('conditions' => array('Senha.codigo' => $codigo)));
		if($buscaSenha != 0)
		{
			$senha_cpf = $this->Senha->find('first', array('conditions' => array('Senha.codigo' => $codigo)));
			
			if($senha_cpf['Senha']['status']=="Ativado")
			{
				$novasenha = $senha_cpf['Senha']['senha'];
				
				$usuarios = $this->User->find('first', array('conditions' => array('User.cpf' => $senha_cpf['Senha']['cpf'])));
				
				$this->User->read(null, $usuarios['User']['id']);
				$this->User->set(array(
				'password' => $this->Auth->password($novasenha)
				));
				$this->User->save();
				
				echo("<pre>");
					//print_r($buscaSenha);
					//print_r($usuarios);
					//echo($codigo);
				echo("</pre>");
				$this->set('msg',"Sua nova senha é: ".$novasenha);
				echo("<br />");
				
				$this->Senha->read(null, $senha_cpf['Senha']['id']);
				$this->Senha->set(array(
				'status' => 'Desativado'
				));
				$this->Senha->save();
			}
			else
			{
				$this->set('msg',"Código inutilizado.");
			}
			
		}
		else
		{
			$this->set('msg',"Código inválido");
		}
		
		
		
	}
	
	function area_restrita()
	{
		if($this->data)
		{
			
			if(isset($this->data['Pro']['objetivo']))
			{
				if($this->data['Pro']['objetivo'] == "adicionar")
				{
					$this->data['Pro']['data_admissao'] = implode("-", array_reverse(explode("-", substr($this->data['Pro']['data_admissao'], 0, 10)))).substr($this->data['Pro']['data_admissao'], 10);
					$this->data['Pro']['data_demissao'] = implode("-", array_reverse(explode("-", substr($this->data['Pro']['data_demissao'], 0, 10)))).substr($this->data['Pro']['data_admissao'], 10);
					//print_r($this->data['Pro']);
					$this->Profi->save($this->data['Pro']);
				}
				
				if($this->data['Pro']['objetivo'] == "editar")
				{
					$this->data['Pro']['data_admissao'] = implode("-", array_reverse(explode("-", substr($this->data['Pro']['data_admissao'], 0, 10)))).substr($this->data['Pro']['data_admissao'], 10);
					$this->data['Pro']['data_demissao'] = implode("-", array_reverse(explode("-", substr($this->data['Pro']['data_demissao'], 0, 10)))).substr($this->data['Pro']['data_admissao'], 10);
					$this->Profi->read(null, $this->data['Pro']['id']);
					$this->Profi->save($this->data['Pro']);
				}
				
				if($this->data['Pro']['objetivo'] == "deletar")
					{
						//echo($this->data['Pro']['id']);
//						$this->Profi->set($this->data);
						$this->Profi->read(null, $this->data['Pro']['id']);
						$this->Profi->remover();
					}
			}
			else
			{
				$this->data['Info']['habilitacao_emissao'] = implode("-", array_reverse(explode("-", substr($this->data['Info']['habilitacao_emissao'], 0, 10)))).substr($this->data['Info']['habilitacao_emissao'], 10);
				
				$this->data['Info']['habilitacao_validade'] = implode("-", array_reverse(explode("-", substr($this->data['Info']['habilitacao_validade'], 0, 10)))).substr($this->data['Info']['habilitacao_validade'], 10);
				
				$this->data['Info']['nascimento'] = implode("-", array_reverse(explode("-", substr($this->data['Info']['nascimento'], 0, 10)))).substr($this->data['Info']['nascimento'], 10);
				
				$this->data['Info']['rg_expedicao'] = implode("-", array_reverse(explode("-", substr($this->data['Info']['rg_expedicao'], 0, 10)))).substr($this->data['Info']['rg_expedicao'], 10);
				
				$this->User->read(null, $this->data['User']['id']);
				$this->User->save($this->data['User']);
				$this->Info->read(null, $this->data['Info']['id']);
				$this->Info->save($this->data['Info']);
			}
			
		}
		
		$this->set('nome', $this->Auth->user('nome'));
		
		$lista_hab = $this->Info->getEnumValues('habilitacao_categoria');
		$this->set('lista_hab', $lista_hab);
		
		$lista_sexo = $this->Info->getEnumValues('sexo');
		$this->set('lista_sexo', $lista_sexo);
		
		$estadoCivil = $this->Info->getEnumValues('estado_civil');
		$this->set('estadoCivil', $estadoCivil);
		
		$nivel_conhecimento = $this->Info->getEnumValues('nivel_ingles');
		$this->set('nivel_conhecimento', $nivel_conhecimento);
		
		$nivel_academico = $this->Info->getEnumValues('nivel_academico');
		$this->set('nivel_academico', $nivel_academico);
		
		$nivel_informatica = $this->Info->getEnumValues('conhecimento_word');
		$this->set('nivel_informatica', $nivel_informatica);
		
		
		$listaDeficiencias = $this->Info->getEnumValues('pessoa_deficiente');
		$this->set('listaDeficiencias', $listaDeficiencias);
		
		$lista_regiao = $this->Info->getEnumValues('regiao');
		$this->set('lista_regiao', $lista_regiao);
		
		$lista_dependentes = $this->Info->getEnumValues('dependentes');
		$this->set('lista_dependentes', $lista_dependentes);
		
		//$this->data = $this->Info->read(null, $this->Auth->user('id'));
		
		$conditions = array("Info.usuario_id" => $this->Auth->user('id'));
		//$conditions = '';
		//Example usage with a model:
		$this->data = $this->Info->find('first', array('conditions' => $conditions));
		
		$this->data['Info']['habilitacao_emissao'] = implode("-", array_reverse(explode("-", substr($this->data['Info']['habilitacao_emissao'], 0, 10)))).substr($this->data['Info']['habilitacao_emissao'], 10);
				
				$this->data['Info']['habilitacao_validade'] = implode("-", array_reverse(explode("-", substr($this->data['Info']['habilitacao_validade'], 0, 10)))).substr($this->data['Info']['habilitacao_validade'], 10);
				
				$this->data['Info']['nascimento'] = implode("-", array_reverse(explode("-", substr($this->data['Info']['nascimento'], 0, 10)))).substr($this->data['Info']['nascimento'], 10);
				
				$this->data['Info']['rg_expedicao'] = implode("-", array_reverse(explode("-", substr($this->data['Info']['rg_expedicao'], 0, 10)))).substr($this->data['Info']['rg_expedicao'], 10);

		$this->set('dados', $this->data);
		$this->set('id', $this->Auth->user('id'));
	}


   function panel()
	{		
		$this->set('habCatOptions', 'a');
	}
	
	function login()
	{
		/*$this->User->create();
					$this->User->set(array('nome' => 'samuel', 'cpf' => '135','senha' => 'admin', 'password' => $this->Auth->password('admin'), 'username' => 'admin'));
					$this->User->save();*/
	}

	function logout()
	{
		$this->redirect($this->Auth->logout()); // Efetuamos logout
	}
	
	function editar($id = null)
	{
		$experiencias = $this->Profi->find('first', array('conditions' => array('Profi.usuario_id' => $id)));
		$this->set('experiencias', $experiencias);
		
		
	}
	
	function calculardias()
	{
	}
	
	function cadastrar()
	{
		
		$pode = true;
		
		$usuarios = $this->User->find('count', array(
		'conditions' => array('User.cpf' => $this->data['Info']['cpf'])
		));
		
		//print_r($usuarios);
		
		if($usuarios == 0)
		{
			//$pode = true;
			$this->set('msgErro', "Cadastro realizado com sucesso.");
		}
		else
		{
			$pode = false;
			$this->set('msgErro', "CPF já cadastrado.");
		}
		
		if($this->data['Info']['nome'] == "")
		{
			$pode = false;
			$this->set('msgErro', "Preencha o campo Nome.");
		}
		else
		{
			//echo("start");
			//$pode = true;
		}
		
		if($this->data['Info']['senha'] == "")
		{
			$pode = false;
			$this->set('msgErro', "Preencha o campo Senha. ");
		}
		else
		{
			
		}
		
		if($this->data['Info']['senha'] != $this->data['Info']['confirmar_senha'])
		{
			$pode = false;
			$this->set('msgErro', "As senhas não conferem");
		}
		else
		{
			//echo("start");
			//$pode = true;
		}
		
		//print_r($this->data);
				
		$info = $this->data;
		$this->set('pode', $pode);
		
		if($this->data & $pode)
		{
			$this->User->create();
			$this->User->set(array(
			'nome' => $info['Info']['nome'],
			'cpf' => $info['Info']['cpf'],
			'password' => $this->Auth->password($info['Info']['senha']),
			'confirmar_senha' => $this->Auth->password($info['Info']['confirmar_senha']),
			'username' => 'admin2'));
			$this->User->save();
			
			$this->loadModel('Info');//acertar nome depois.
			$this->Info->create();
			$this->Info->set(array('usuario_id' => $this->User->getLastInsertId()));
			$this->Info->save($this->data);
			
			$this->set('s',$info['Info']['senha']);
			$this->set('c',$info['Info']['cpf']);
			
			
			
			/*$this->loadModel('Profi');//acertar nome depois.
			$this->Profi->create();
			$this->Profi->set(array('usuario_id' => $this->User->getLastInsertId(), 'info_id' => $this->Info->getLastInsertId()));
			$this->Profi->save($this->data);
			$this->redirect($this->Auth->login());*/
			
			}
	}
}
?>